#include "Functions.h"

int getMaxCharsOnScreen(OSL_FONT *font)
{
	if(!font) return -1;
	OSL_FONT *prevfont = osl_curFont;
	oslSetFont(font);
	int w = (int)480/oslGetStringWidth("A");
	oslSetFont(prevfont);
	return w;
}
int getCharWidth(OSL_FONT *font)
{
	if(!font) return -1;
	OSL_FONT *prevfont = osl_curFont;
	oslSetFont(font);
	int w = oslGetStringWidth("A");
	oslSetFont(prevfont);
	return w;
}

char * intToString(int i)
{
	stringstream ss;
	string str;
	ss << i;
	ss >> str;
	return (char *)str.c_str();
}
int stringToInt(const char *str)
{
	return atoi(str);
}
string joinString(string str1, string str2)
{
	string str = str1;
	str += str2;
	return str;
}
string joinString(string str1, string str2, string str3)
{
	string str = str1;
	str += str2;
	str += str3;
	return str;
}
vector<string> splitString(const char *_str, char c)
{
	vector<string> v;
	v.clear();
	string str = _str;
	int first = 0;
	for(int i = 0; i < str.size(); i++)
	{
		if(str.at(i) == c)
		{
			v.push_back(str.substr(first,i-first).c_str());
			first = i + 1;
		}
		else if(i == str.size() - 1)
		{
			v.push_back(str.substr(first).c_str());
		}
	}
	return v;
}
//Compare string without case
bool strequncase(string str1,string str2)
{
	if(str1.length() != str2.length())
		return false; //not equal
	for(int i = 0; i < str1.length(); i++)
	{
		if(tolower(str1[i]) != tolower(str2[i]))
			return false;
	}
	return true;
}
string strtoupper(string _str)
{
	string str = "";
	for(int i = 0; i < _str.length(); i++)
		str += toupper(_str[i]);
	return str;
}
string strtolower(string _str)
{
	string str = "";
	for(int i = 0; i < _str.length(); i++)
		str += tolower(_str[i]);
	return str;
}
bool strnocasecmp(string _str1, string _str2)
{
	if(_str1.length() != _str2.length())
		return false;
	for(int i = 0; i < _str1.length(); i++)
	{
		if(tolower(_str1[i]) != tolower(_str2[i]))
			return false;
	}
	return true;
}
bool contains(vector<string> _v, string value)
{
	for(int i = 0; i < _v.size(); i++)
	{
		if(_v.at(i) == value)
			return true;
	}
	return false;
}
bool contains(vector<string> _v, const char *value)
{
	for(int i = 0; i < _v.size(); i++)
	{
		if(_v.at(i) == value)
			return true;
	}
	return false;
}
int getNextOutOf(int from, int outof)
{
	if(from + 1 > outof - 1) return 0;
	else return from + 1;
}
int getPrevOutOf(int from, int outof)
{
	if(from - 1 < 0) return outof - 1;
	else return from-1;
}
string getFileType(const char * type)
{
	vector<string> t = splitString(type,'.');
	return t.at(t.size()-1);
}
string getFileName(string filepath)
{
	vector<string> sarr = splitString(filepath.c_str(),'/');
	return sarr[sarr.size()-2];
}
void getFileName(string filepath, char *onlyName)
{
	int slash = 0;

	//Cerco l'ultimo slash:
	int i = 0;
	int len = filepath.length();
	for (i = len - 2; i >= 0; i--){
		if (filepath[i] == '/'){
			slash = i;
			break;
		}
	}
	if (slash)
		strcpy(onlyName, filepath.c_str() + slash + 1);
	else
		strcpy(onlyName, filepath.c_str());
}
string getFileDir(string filepath)
{
	vector<string> splits = splitString(filepath.c_str(),'/');
	string str = "";
	for(int i = 0; i < splits.size()-1; i++)
	{
		str += splits[i];
		str += "/";
	}
	return str;
}
